//
//  UserAccount.swift
//  WeiboThree
//
//  Created by itheima on 16/6/6.
//  Copyright © 2016年 itheima. All rights reserved.
//

import UIKit

let userAccountKey = "sharedUserAccountKey"


class UserAccount: NSObject {

    /// 单例
    static let sharedUserAccunt = UserAccount()
    
    /// 用户id
    var uid: String?
    
    /// 用户眤称
    var screen_name: String?
    
    /// 头像
    var avatar_large: String?
    
    /// 令牌
    var access_token: String?
    
    /// 过期秒数
    var expires_in: NSTimeInterval = 0 {
        didSet {
            expires_date = NSDate(timeIntervalSinceNow: expires_in)
        }
    }
    
    /// 过期时期
    var expires_date: NSDate?
 
    
    /// 用户是否登录了
    var isLogin:Bool {
        let date = NSDate()
        //如果 result是降序或者 access_token == nil 没登录
        //如果 result是升序 并且 access_token != nil 登录了
        return (access_token != nil && date.compare(expires_date!) == NSComparisonResult.OrderedAscending) ? true : false
    }
    
    override var description: String {
        return dictionaryWithValuesForKeys(["uid", "screen_name", "avatar_large", "access_token", "expires_date"]).description
    }
    
    ///  构造函数：从userDefault读取用户信息字典，完成初始化
    ///
    ///  - returns: userAccount的实例
    override init() {
        super.init()
        //需要readUserAccount再初始化
        readUserAccount()
    }
    
    ///  kvc构造函数：字典转模型
    ///
    ///  - parameter dict 字典
    ///
    ///  - returns: userAccount的实例
    init(dict: [String: AnyObject]) {
        super.init()
        setValuesForKeysWithDictionary(dict)
    }
    
    ///  字典转模型的异常处理
    ///
    ///  - parameter value 没有对应属性的key值的value
    ///  - parameter key 没有对应属性的key
    override func setValue(value: AnyObject?, forUndefinedKey key: String) {
        //print("key:\(key), value:\(value)")
    }
    
    ///  保存用户信息
    ///
    ///  - parameter userAccountDict 用服务器返回的用户信息的字典
    func saveUserAccount(userAccountDict: [String: AnyObject]) {
        //1. 先用userAccountDict做一个字典转模型的操作
        setValuesForKeysWithDictionary(userAccountDict)
        //2. 再用模型转字典
        let modelDic = dictionaryWithValuesForKeys(["uid", "screen_name", "access_token", "expires_date", "avatar_large"])
        //3. 保存字典
        NSUserDefaults.standardUserDefaults().setValue(modelDic, forKey: userAccountKey)
    }
    
    ///  从userDefaults读取用户信息
    func readUserAccount() {
        if let userAccoutObejct = NSUserDefaults.standardUserDefaults().valueForKey(userAccountKey),
            let userAccoutDic = userAccoutObejct as? [String: AnyObject] {
                setValuesForKeysWithDictionary(userAccoutDic)
            }
    }

}









